home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2007 December / PCWDEC07.iso / Software / Freeware / FlashGot 0.6.4 / chrome / flashgot.jar / content / flashgot / DAP.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2007-08-29  |  2.0 KB  |  92 lines

  1. #include "FlashGot.h"
  2.  
  3. #define DMS_POLL_DELAY 50
  4. #define DMS_POLL_TIMEOUT 30000
  5.  
  6. #import "progid:InternetExplorer.Application.1"
  7. #import "progid:ScriptBridge.ScriptBridge.1" 
  8. using namespace SHDocVw;
  9. using namespace MSHTML;
  10.  
  11.  
  12.  
  13. void DMSDownloadAcceleratorPlus::dispatch(const DownloadInfo *downloadInfo)
  14. {
  15.     HELPER(helper);
  16.     switch(downloadInfo->opType) 
  17.     {
  18.         case OP_ONE:
  19.         {
  20.             VARIANT v[4];
  21.             LinkInfo l=downloadInfo->links[0];
  22.             v[0].vt=v[1].vt=v[2].vt=v[3].vt=v[3].vt=VT_BSTR;
  23.             v[3].bstrVal= l.url; // URL
  24.             v[2].bstrVal= downloadInfo->referer ; // Referer
  25.             v[1].bstrVal= l.cookie ; // cookie
  26.             v[0].bstrVal= l.comment ; // info
  27.             helper.invoke("MenuUrl2",v,4);
  28.             break;
  29.         }
  30.         
  31.         case OP_SEL: case OP_ALL:
  32.         {
  33.             IWebBrowser2Ptr ie(__uuidof(InternetExplorer));    
  34.             InternetSetCookie(downloadInfo->referer,NULL,downloadInfo->extras[0]);
  35.             
  36.             
  37.             ie->PutSilent(VARIANT_TRUE);
  38.             ie->PutOffline(VARIANT_TRUE);
  39.             
  40.             VARIANT v1,v2;
  41.             v1.vt=v2.vt=VT_BSTR;
  42.             v1.bstrVal=downloadInfo->referer;
  43.             v2.bstrVal="Referer: "+downloadInfo->extras[1];
  44.             
  45.             
  46.             ie->Navigate2(&v1,&vtMissing,&vtMissing,&vtMissing,&v2);
  47.             long timeout=DMS_POLL_TIMEOUT;
  48.             for(int j = 2; j--> 0;)
  49.             {
  50.                 while(!ie->ReadyState)
  51.                 { 
  52.                     if( (timeout -= DMS_POLL_DELAY) <0) 
  53.                     {
  54.                         fail("DAP Timeout", 9000);
  55.                     }
  56.                     Sleep(DMS_POLL_DELAY);
  57.                 }
  58.             }
  59.             ie->Stop();
  60.             IHTMLDocument2Ptr doc=NULL;
  61.             
  62.             try { 
  63.                 doc=ie->GetDocument();
  64.             } catch(...) {
  65.             }
  66.                 
  67.         
  68.             if(doc) {
  69.                 
  70.                 bstr_t html;
  71.                 LinkInfo *links=downloadInfo->links;
  72.                 for(int j=0, linksCount=downloadInfo->linksCount; j<linksCount; j++) { // skipping postdata
  73.                     LinkInfo l=links[j];
  74.                     html+="<a href=\""+l.url+"\">"
  75.                         +l.comment+"</a>";
  76.                 }
  77.                 IHTMLElementPtr body = doc->Getbody();
  78.                 if(body)
  79.                 {
  80.                     body->innerHTML=html;
  81.                 
  82.                     VARIANT v;
  83.                     v.vt=VT_DISPATCH ;
  84.                     v.pdispVal = doc;
  85.                     
  86.                     helper.invoke("LeechLinks",&v,1);
  87.                 }
  88.                 
  89.             }
  90.         }
  91.     }
  92. }